08df7db618ad3afe22d28df7808f6dc8a1785e6b,src/main/java/net/amygdalum/testrecorder/deserializers/builder/DefaultMapAdaptor.java,DefaultMapAdaptor,tryDeserialize,#SerializedMap#ObjectToSetupCode#,22

Before Change


		TypeManager types = generator.getTypes();
		types.registerTypes(value.getResultType(), value.getType());

		String name = generator.localVariable(value, Map.class);

		Map<Computation, Computation> elementTemplates = value.entrySet().stream()
			.collect(toMap(entry -> entry.getKey().accept(generator), entry -> entry.getValue().accept(generator)));

		Map<String, String> elements = elementTemplates.entrySet().stream()
			.collect(toMap(
				entry -> generator.adapt(entry.getKey().getValue(), value.getMapKeyType(), entry.getKey().getType()), 
				entry -> generator.adapt(entry.getValue().getValue(), value.getMapValueType(), entry.getValue().getType())));

		List<String> statements = elementTemplates.entrySet().stream()
			.flatMap(entry -> Stream.concat(entry.getKey().getStatements().stream(), entry.getValue().getStatements().stream()))
			.distinct()
			.collect(toList());

		String map = newObject(types.getBestName(value.getType()));
		String mapInit = assignLocalVariableStatement(types.getSimpleName(value.getResultType()), name, map);
		statements.add(mapInit);

		for (Map.Entry<String, String> element : elements.entrySet()) {
			String putEntry = callMethodStatement(name, "put", element.getKey(), element.getValue());
			statements.add(putEntry);
		}

		generator.finishVariable(value);
		
		return new Computation(name, value.getResultType(), true, statements);
	}

}

After Change


		TypeManager types = generator.getTypes();
		types.registerTypes(value.getResultType(), value.getType());

		return generator.forVariable(value, Map.class, local -> {

			Map<Computation, Computation> elementTemplates = value.entrySet().stream()
				.collect(toMap(entry -> entry.getKey().accept(generator), entry -> entry.getValue().accept(generator)));

			Map<String, String> elements = elementTemplates.entrySet().stream()
				.collect(toMap(
					entry -> generator.adapt(entry.getKey().getValue(), value.getMapKeyType(), entry.getKey().getType()),
					entry -> generator.adapt(entry.getValue().getValue(), value.getMapValueType(), entry.getValue().getType())));

			List<String> statements = elementTemplates.entrySet().stream()
				.flatMap(entry -> Stream.concat(entry.getKey().getStatements().stream(), entry.getValue().getStatements().stream()))
				.distinct()
				.collect(toList());

			String map = newObject(types.getBestName(value.getType()));
			String mapInit = assignLocalVariableStatement(types.getSimpleName(value.getResultType()), local.getName(), map);
			statements.add(mapInit);

			for (Map.Entry<String, String> element : elements.entrySet()) {
				String putEntry = callMethodStatement(local.getName(), "put", element.getKey(), element.getValue());
				statements.add(putEntry);
			}

			return new Computation(local.getName(), value.getResultType(), true, statements);
		});
	}

}